perm filename HALHED.PAL[HAL,HE]4 blob sn#138630 filedate 1974-12-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	.SBTTL  ASSEMBLY FLAGS
C00005 00003	routine calling and defining macros.
C00008 00004	macros for handling tables & blocks
C00012 00005	Graph structure definitions
C00014 ENDMK
C⊗;
.SBTTL  ASSEMBLY FLAGS

;This macro gives the switch SW a default value VAL
       .MACRO STSW SW,VAL
       .IFNDF SW
	SW == VAL   ;if do not have a value already, give it one
       .ENDC
       .ENDM

	STSW  FLOAT,1	;0 => no floating point capacity

.SBTTL	DEFS -- standard definitions for HAL runtime routines

; PROGRAM DEFINITIONS

ERRTRP==4		;time out and error trap
ILGINS==10		;illegal instruction
CLKTRP==104		;clock trap
RUG=50000		;Restart of RUG
PS=177776		;processor status word
KBIS=177560		;keyboard input status
KBIR=177562		;keyboard input register
KBOS=177564		;keyboard output status
KBOR=177566		;keyboard output register
CLKCNT=172544		;clock counter
CLKSET=172542		;clock set register
CLKS=172540		;clock status

STRT11=500		;starting address of program
IBUF==150		;start of input buffer from 11
OBUF==160		;start of output buffer to 11 
HCOR=77776		;highest useable word in core


;REGISTER DEFINITIONS

PC=%7			;program counter
SP=%6			;stack pointer
RF==%5			;Display pointer
R5=%5
R4=%4			;Saved across procedure calls
R3=%3			;Saved across procedure calls
R2=%2			;Saved across procedure calls
R1=%1			;temp
R0=%0			;temp
AC5==%5			;Temp Floating point register
AC4==%4			; "      "       "      "
AC3==%3			; "      "       "      "
AC2==%2			; "      "       "      "
AC1==%1			; "      "       "      "
AC0==%0			; "      "       "      "

;MARK DEFINITIONS
MARK0 == 6400		;MARK 0
MARK1 == 6401		;MARK 1
MARK2 == 6402		;ETC.
MARK3 == 6403
MARK4 == 6404
MARK5 == 6405

;Absolute address initialization
TEMP == .		:∂ave location counter for a bit.
. = 244			;Floating exception
	.WORD 246
	RTI		;No action taken
. = TEMP		;Restore location counter
;routine calling and defining macros.
;Coded by RHT 9/74.

;This should be used at the start of routines which reference
;	parameters off the RF stack.  It gives the parameters
;	symbolic names for clarity of coding.
;For example,
;
;	ROUTINE FOO,<A,B>
;
;Goes to
;
;	A==4
;	B==2
;FOO:

       .MACRO ROUTINE ID,ARGS
           .IFNB ARGS
	    NNNN==0
	       .IRP II,<ARGS>		;Raise NNNN to twice the number of args.
		NNNN==NNNN+2
	       .ENDM
	       .IRP II,<ARGS>		;Assign each arg NNNN and decrease same.
		.IFDF II
		   .IF1 
		   	.ERROR Multiple definition for II
		   .ENDC
		.IFF
		    II == NNNN
		    NNNN == NNNN-2
		.ENDC
	       .ENDM
	   .ENDC
ID:
       .ENDM

;This is useful in calling rountines which reference parameters off
;	the RF stack.  It sets up the stack properly, but does not
;	save R0 or R1.

       .MACRO CALL ID,ARGS
	MOV	RF,-(SP)	;Save RF
	NNNN == 6400		;This is a MARK 0 instruction
	   .IFNB ARGS
	       .IRP II,<ARGS>
		MOV	II,-(SP);Push an argument
		NNNN == NNNN+1	;Make NNNN the next MARK instruction.
	       .ENDM
	   .ENDC
	MOV	#NNNN,-(SP)	;Push the mark instruction.
	MOV	SP,RF		;Set up the display in RF.
	JSR	PC,ID		;Call the routine
       .ENDM


;This macro is a temporary(ha,ha) method of defining floating point
;constants. LABIL is the constant name and MSB and LSB it's two
;16bit octal parts.

       .MACRO FP  LABIL,MSB,LSB
	.MACRO  LABIL
	 	.WORD	MSB,LSB	
	.ENDM
       .ENDM
;macros for handling tables & blocks

       .MACRO	XX SYM			;Just gives SYM the next number.
	   .IFDF SYM
	       .IF1
	       .ERROR You are using SYM in two ways!!!
	       .ENDC
	   .IFF
	    SYM == II
	    II == II+2
	   .ENDC
       .ENDM

.MACRO PUTLOC	ADR,VAL
	II==.
	.= ADR
	VAL
	.=II
.ENDM

.MACRO TT INX,VAL
	.=II+INX
	VAL
.ENDM

;SMALL BLOCK DESCRIPTOR FORMAT

	II == 0
	XX	IDFLAG	;ACTUALLY A BYTE -- GETS PUT IN ID PART OF TAG WORD
	XX	MAPRTN	;ROUTINE TO BE CALLED ON MARK
	XX	SIZE	;How many words for a value cell in this type block.
	XX	NPERB	;NUMBER OF BLOCKS PER BUFFER
	XX	GCFG	;SET IF THIS IS NOT A COLLECTABLE AREA
	XX	NMIN	;MIN NUMBER OF FREE BLOCKS TO BE RETURNED BY GC
	XX	NPCT	;MIN % OF FREE BLOCKS TO BE RETURNED BY GC
	XX	NXTSID	;NEXT BLOCK ON ID CHAIN 
	XX	FFREE	;FREE LIST
	XX	FSTBUF	;OLDEST BUFFER
	XX	LSTBUF	;NEWEST BUFFER
	XX	NALLOC	;NUMBER ALLOCATED
	XX	NFREE	;NUMBER FREE
	SPCHDR == II

;; EACH BUFFER
	II == 0
	XX	NXTBUF	;NEXT BUFFER
	XX	PRVBUF	;PREVIOUS BUFFER
	XX	LSTBLK	;ADDRESS OF LAST BLOCK IN THIS BUFFER
	XX	FSTBLK	;POINTS AT FIRST LOCN
	BUFHDR == II

;; EACH BLOCK
	II == 0
	TAG == -1	;≠0 MEANS INUSE (USED IN GC)
	TAGID == -2	;USED TO HOLD AN "ID" FOR THIS RECORD
	XX	WORD0	;FIRST DATA WORD

;;GC METHODS
	II == 0
	XX	METH	;ROUTINE TO CALL
	XX	NXTMTH	;NEXT ON CHAIN

.MACRO MMETH ROUT
	ROUT
	0
.ENDM

;;SPECIAL SPACES
.IF2
	SIDHED == SIDCHN ;SO AUTOMATIC LINKAGE WORKS
.ENDC

SIDCNT == 0;
SIDCHN == 0;

.MACRO DEFSPC ID,MMRT,SZ,NPB,GCF,NMN,NPC
    .IFNDF ID
	SIDCNT==SIDCNT+1
	ID==SIDCNT
    .ENDC
    II==.
    .BLKW SPCHDR/2
	TT	IDFLAG,ID
	TT	MAPRTN,MMRT
	TT	SIZE,SZ
	TT	NPERB,NPB
	TT	GCFG,GCF
	TT	NMIN,NMN
	TT	NPCT,NPC
	TT	NXTSID,SIDCHN
	TT	FFREE,0
	TT	FSTBUF,0
	TT	LSTBUF,0
	TT	NALLOC,0
	TT	NFREE,0
    .=II+SPCHDR
    SIDCHN == II
    .IF2
	.IFGE MAXIDF-ID
	    II==.
	    .=SIDTBL+<ID*2>
	    SIDCHN
	    .=II
	.ENDC
    .ENDC
.ENDM

MAXIDF == 30	;MAX INDEX INTO SIDTBL

;Graph structure definitions
;RHT 9/74

;CELL LINKS
	II==0
	XX	DATUM
	XX	LINKF
	XX	LINKB

;GRAPH NODES
	II==0
	XX	NXTGN		;CHAIN OF ALL GNODES IN THE WORLD
	XX	PRVGN
	XX	INVMRK		;USED AS FLAG
	XX	GNVAL		;POINTER AT VALUE
	XX	GNDEPS		;DEPENDENT GRAPH NODES
	XX	GNCLCS		;CALCULATOR LIST (DBL LINKED)
	XX	GNCHGS		;CHANGE LIST

;CALCULATOR CELL
	II==0
	XX	NXTCLC		;LIST LINK
	XX	NEEDED		;LIST OF NEEDED NODES
	XX	FORM		;SOME SORT OF CODE TO EVAL

;CHANGER CELL
	II==0
	XX	NXTCHG
	XX	CHGCOD